package org.javahispano.jwitter.view.controller;

import static org.javahispano.jwitter.Constantes.UNDEFINED;
import static org.javahispano.jwitter.Constantes.MAX_MENSAJES;

import java.security.Principal;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.javahispano.jwitter.domain.Mensaje;
import org.javahispano.jwitter.domain.Usuario;
import org.javahispano.jwitter.services.MensajeService;
import org.javahispano.jwitter.services.RegistroService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class MensajeController {
	private static Logger log = Logger.getLogger(MensajeController.class.getName());
	@Autowired
	private MensajeService mensajeService;
	@Autowired
	private RegistroService registroService;
	
	@RequestMapping("/mi_jwitter.html")
	public String mostrarMensajes(Model model, Principal principal, @RequestParam(value="todos", required=false) String todos) {
		Collection<Mensaje> mensajes = mensajeService.mensajesUsuario(principal.getName(), todos == null ? MAX_MENSAJES : UNDEFINED);
		Usuario user = registroService.findById(principal.getName());
		
		model.addAttribute("mensajes", mensajes);
		model.addAttribute("usuario", user);
		return "mi_jwitter";
	}
	
	@RequestMapping("/usuario.html")
	public String mostrarUsuario(Model model, 
								 Principal principal, 
								 @RequestParam("usuario") String username, 
								 @RequestParam(value="todos", required=false) String todos) {
		
		Usuario user = registroService.findById(username);
		
		// Comprobamos que el usuario no sea el mismo que el solicitado y que exista
		if(principal.getName().equals(username) || user == null) {
			return "redirect:mi_jwitter.html";
		}

		// Comprobamos si el solicitante tiene el usuario como contacto
		Usuario solicitante = registroService.findById(principal.getName());
		
		if(solicitante.getContactos().contains(user)) {
			model.addAttribute("existeContacto", true);
		}
		
		Collection<Mensaje> mensajes = mensajeService.mensajesUsuario(username, todos == null ? MAX_MENSAJES : UNDEFINED);
		
		model.addAttribute("mensajes", mensajes);
		model.addAttribute("usuario", user);
		
		return "usuario";
	}
}
